#include <iostream>
#include <list>
using namespace std;

/*
    函数对象的三种情况
        1.谓词函数  返回值是bool 形参有一个或者两个
            形参是一个 --> 一元谓词函数
            形参有两个 --> 二元谓词函数
            使用：list1.remove_if(fun)
        2.类重载圆括号，传递类对象
        3.lambda 表达式
            匿名函数（Lambda表达式）
            返回值 [](形参){ 函数源码 }
            返回值是bool是可以省略

*/

bool fun(int n)
{
    if (n < 100)
    {
        return true;
    }
    return false;
}

class Test
{
public:
    bool operator()(int n)
    {
        if (n > 100)
        {
            return true;
        }
        return false;
    }
};

int main()
{
    list<int> list1 = {12, 12, 12, 56, 96, 12, 968, 12, 745, 12};
    
    // 使用谓词函数
    // list1.remove_if(fun);

    // 使用类重载圆括号
    // Test T1;
    // list1.remove_if(T1);

    // 使用lambda表达式
    list1.remove_if([](int n) { return n < 100;});


    for (auto i : list1)
    {
        cout << i << " ";
    }

    return 0;
}